package com.st.demo;

import fmath.conversion.ConvertFromLatexToMathML;
import fmath.conversion.ConvertFromMathMLToWord;

import java.util.ArrayList;
import java.util.List;
import java.util.UUID;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

/**
 * created by tlfu on 2018/6/16
 */
public class Mathml2Word {
    public static void main(String[] args) {
        String mathMl1="<math><msqrt><mn>3</mn></msqrt><mo>&#215;</mo><msqrt><mn>2</mn></msqrt></math>";

        String a = "<p><math xmlns=\"http://www.w3.org/1998/Math/MathML\"><mfrac><mn>23</mn><mn>1232112</mn></mfrac></math></p><p>乘号</p><p><math xmlns=\"http://www.w3.org/1998/Math/MathML\"><mn>12</mn><mo>&#215;</mo><mn>23231</mn><mo>=</mo><mo></mo></math></p><p>开方</p><p><math xmlns=\"http://www.w3.org/1998/Math/MathML\"><mroot><mn>2323</mn><mn>12321312</mn></mroot></math></p><p><math xmlns=\"http://www.w3.org/1998/Math/MathML\"><msqrt><mi>d</mi><mi>d</mi><mi>d</mi><mi>d</mi></msqrt></math></p><p><math xmlns=\"http://www.w3.org/1998/Math/MathML\"><mi>x</mi><mo>&#160;</mo><mo>=</mo><mo>&#160;</mo><mfrac><mrow><mo>-</mo><mi>b</mi><mo>&#177;</mo><msqrt><msup><mi>b</mi><mn>2</mn></msup><mo>-</mo><mn>4</mn><mi>a</mi><mi>c</mi></msqrt></mrow><mrow><mn>2</mn><mi>a</mi></mrow></mfrac></math></p>";

        List<String> subUtil = getSubUtil(a, "\\<math xmlns=\"http://www.w3.org/1998/Math/MathML\">(.*?)\\</math>");
        for (String str : subUtil){
            String uuid = UUID.randomUUID().toString().replaceAll("-", "");
            String path=System.getProperty("user.dir")+"/"+uuid+".docx";
            ConvertFromMathMLToWord.writeWordDocFromMathML(path,str);
        }
    }

    /**
     * 正则表达式匹配两个指定字符串中间的内容
     * @param soap
     * @param regex
     * @return
     */
    public static List<String> getSubUtil(String soap, String regex){
        List<String> list = new ArrayList<String>();
        // 匹配的模式
        Pattern pattern = Pattern.compile(regex);
        Matcher m = pattern.matcher(soap);
        while (m.find()) {
            //m.group(1)不包括这两个字符
            int i = 1;
            list.add(m.group(i));
            i++;
        }
        return list;
    }
}
